home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / eulisp / you-075a.lha / you-075a / lamport.c < prev    next >
C/C++ Source or Header  |  1992-06-18  |  643b  |  56 lines

  1. #include "defs.h"
  2. #include "lamport.h"
  3.  
  4. void dijkstra_initialise(DijkstraSemaphore sem)
  5. {
  6.   int i;
  7.  
  8.   sem->k = 0;
  9.   for (i=0; i<MAX_PROCESSORS; ++i) {
  10.     sem->b[i] = TRUE;
  11.     sem->c[i] = TRUE;
  12.   }
  13. }
  14.  
  15. void dijkstra_enter(DijkstraSemaphore sem,ProcID i)
  16. {
  17.   int j;
  18.  
  19.  l0:
  20.  
  21.   sem->b[i] = FALSE; 
  22.  
  23.  l1:
  24.  
  25.   if (sem->k != i) {
  26.  
  27.     sem->c[i] = TRUE;
  28.  
  29.     if (sem->b[sem->k]) sem->k = i;
  30.     goto l1;
  31.  
  32.   }
  33.   else {
  34.  
  35.     sem->c[i] = FALSE;
  36.  
  37.     for (j=0; j<RUNNING_PROCESSORS(); ++j)
  38.       if ((j != i) && !sem->c[j]) goto l1;
  39.  
  40.   }
  41. }
  42.  
  43. void dijkstra_exit(DijkstraSemaphore sem,ProcID i)
  44. {
  45.   sem->c[i] = TRUE;
  46.   sem->b[i] = TRUE;
  47. }
  48.  
  49.  
  50.  
  51.     
  52.     
  53.  
  54.   
  55.   
  56.